From ba16549664b44b047cc604f8383131bed907aa9f Mon Sep 17 00:00:00 2001 From: Matthew Owens <matthew@owens.tech> Date: Thu, 1 Oct 2020 15:48:39 +0100 Subject: [PATCH] basic paddle movement --- src/main.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++- src/main.o | Bin 3696 -> 30648 bytes 2 files changed, 133 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 0c0ce22..fb05761 100644 --- a/src/main.c +++ b/src/main.c @@ -1,10 +1,141 @@ #include <stdio.h> #include "clogs.h" #include "vector.h" +#include <SDL2/SDL.h> +#include <stdbool.h> +#include "timestep.h" + +typedef struct Colour { + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 a; +} Colour; + +typedef struct Box { + Colour c; + SDL_Rect r; +} Box; + +static SDL_Window *window = NULL; +static SDL_Renderer *renderer = NULL; +static const Vec2d windowSize = { 1920, 1080 }; +static bool quit = false; +static const float speed = 5.f; +static const Colour bgClr = { 0x1c, 0x1c, 0x1c, 0xff }; + +Box pad, ball; +Box *vec_bricks = NULL; + +static void paddle_init() +{ + pad.r.w = 192; + pad.r.h = 32; + + pad.r.x = (windowSize.x / 2) - (pad.r.w / 2); + pad.r.y = windowSize.y - ((windowSize.y / 8) - (pad.r.h / 2)); + + pad.c.r = pad.c.g = pad.c.b = 0x55; + pad.c.a = 0xff; + + COUT("pad.r. (%d, %d, %d, %d)", + pad.r.x, pad.r.y, pad.r.w, pad.r.h); +} + +static void paddle_render() +{ + SDL_SetRenderDrawColor(renderer, pad.c.r, pad.c.g, pad.c.b, pad.c.a); + SDL_RenderFillRect(renderer, &pad.r); +} + +static void paddle_update(const Uint8* keyStates, float dt) +{ + if(keyStates[SDL_SCANCODE_LEFT] || keyStates[SDL_SCANCODE_A]) { + pad.r.x -= speed * dt; + } + + if(keyStates[SDL_SCANCODE_RIGHT] || keyStates[SDL_SCANCODE_D]) { + pad.r.x += speed * dt; + } + // screen bounds check + if(pad.r.x + pad.r.w > windowSize.x) { pad.r.x = windowSize.x - pad.r.w; } + if(pad.r.x < 0 ) { pad.r.x = 0; } +} + +static bool init() +{ + if(SDL_Init( + SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_EVENTS + ) < 0) { + COUT_ERR("SDL init failed! SDL_Error: %s", SDL_GetError()); + return false; + } + + window = SDL_CreateWindow("pong", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + windowSize.x, windowSize.y, + SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_BORDERLESS); + + if(window == NULL) { + COUT_ERR("Couldn't create window! SDL_Error: %s", SDL_GetError()); + return false; + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + + if(renderer == NULL) { + COUT_ERR("Couldn't create renderer! SDL_Error: %s", SDL_GetError()); + return false; + } + + ts_init(60.f); + paddle_init(); + return true; +} + +static void update() +{ + SDL_Event e; + int nPhysUpdates = 0; + const Uint8 *keyStates = SDL_GetKeyboardState(NULL); + + ts_update(); + + while(SDL_PollEvent(&e) != 0){ + if(e.type == SDL_QUIT) { quit = true; } + } + + while(ts_phys_required(nPhysUpdates)){ + paddle_update(keyStates, 1.f); + nPhysUpdates++; + } +} + +static void render() +{ + SDL_SetRenderDrawColor(renderer, bgClr.r, bgClr.g, bgClr.b, bgClr.a); + SDL_RenderClear(renderer); + paddle_render(); + SDL_RenderPresent(renderer); +} + +static void cleanup() +{ + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +} int main() { - printf("hello, world\n"); - COUT("TEST"); + //TODO: run on primary display + if(!init()) { return 1; } + + while(!quit) { + update(); + render(); + } + + cleanup(); return 0; } diff --git a/src/main.o b/src/main.o index afd1b90efa12f82506cda7327db9c4ca1630051b..667fbd2f1ade99abc93541b552b34d02bb830644 100644 GIT binary patch literal 30648 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 D?Q{<T literal 3696 zcmbVOdu&r>6hF6j-K(s0j0s}{YXS`7EMrW0EY3Y#x8i`g2bRUrwQFIxZiTkY;&X&W za7tvn9C6?y0f{jYOh62Yj4fuy$cT?9_y9uC_?Hd{5|jkbx%WF=`RM-PB)#XH-+6rB zJ?DJi?W+~lc7vh-lLEysrZEbTpE4$wXkrOu!enTudj0pR?T-`kCq1gRXX@-xVyEbF zf*zVtlbVKFeSUu+&-#2I==VZ>MO{6#yVrG)7ev<{)zzpT>3?x(U|?Vn3^{LFcWzbE z`m9IyEjo94vZ>p11?sA6W@L8{r+(14%DLeB(ynRF-Yd@9%?Zw~{YG!zt|h+|T8(?R z?5J6A>0j$Vn^Wv7e_Wq8;^_~Wu5?<iXIer9Lk;WyDEab4`1C7YWv&-sPkyRZNmpi> zGfb*E+nlaUO0rA=Fw6v#sTd&uRfx#|3A4eG0boo}RCBS(WO8IIF%_8>n-l~S=YVR? zF##mmlqa%Ovu<%@P{xv}d&{!ODY+1x92tdKhN%E4isHy1H1#1&I}byNxF`9#8r38H z-@BWen?0bI6TQuYUDE-~=b)_--Bfst0+s*FY53H7j9HXWumxKDfwiG|Bx$9$wNO3{ zw6%f(ql^lq5Z7pm(eTtsV@mQ#qq53iz+8y(ex?h7^+<oyTW3-S^DW&spT1^j|G4VL z<<g$a(%Qp4!xm4~mRr3uGatOT^5F5+4|MhgIxCAF?)_`)r|CWA$BMpdZz^xwvUBCL zmDdjJ&YXHEucq;UW5dtSbk|0PGEUAY$PJF>+>Cs!EF4Mp|9a+_^P_E_d+iA?{oQxb zcOidbQP5s-{K@lq`#)T;yYF1%(Y=GIpF}<@IQ!0x(4O2|hFOy?d{dKKI5K=H*M9!p z#<!O(`(ot6z_DGMpSx<AwtDGh*CwbeFJEGvQ@Olhu62ICt-z*Nda|g2@<J^r5sQ*N zAt`wWzHAQS^dl;yN2%HJnxQ-`F@O%Fk3&?a1h{%9o>`4n^=_+*t&B%1W{O8D81I2; zPYU9bgeBHPg~WUO2~Z*ao2U?T8N@`YAci#t)AOWBh_0$IaU9$-4vyzeB0QA%PCR|0 z7l=`B;$<lq2VXc2&gaABvNtR*uXn6i?sDO1Xcv~NvU){XX|-#G-CkEw@2W2?tFCat z`i<d`ewJK;jbTiyQIg==;X?WL9i1i!oI05vgX8(vi2b?Z(<GcLGFRY~hkDHUxwEN= z#ded|C7inU9{z}E4@8W&=_=m!Ix*fU^en-t1JMfuW!?|@(~pVoFV0gY3{-z2#_=N5 zs912ucM82i!haKbwS<ofy-vcD#K^cM{0E`8O88l!2PHgR<ms01SwioT@Y_P)A>rJ| zeG)FzXn(j4^}=va^5^;<5xCr!VaZ?nOe6MfjK2|Onjxat`QaHR+(Hi|Ie&!?--BBP zPBRiaCtwS0Y7e_T$iqRMx3U!U`Q5g#FA@fu*By3)%@YcNEf~-h&Fb}eHm-H8>sS*& zA5C_9JV9S4x>2xzg6@vBJ_;Sf{OdY=9D?hCttHUj?(4v%Is##z4L<{qgu?EYHWB1& zb*%}y+kN6K?w?sPlxoIx<xC|)(7q)MA{XNoMY2(%GhPx!bfJ}+h7{46)<25nGtcK~ zHe!U!UzF%YCE}UM>*t|?a^7$Je2k@>cg+CmyguFMu_Uig_ko7-iwS2wPjAEqqb#|> zV#MOr?~<rriP#v;KlO;?xqeF#llO!WWDAhbJ7Gk!ZxdsjSn~onEF9+votfkYPBg^Z zzg0N$`KSHUH-qDO{~HjK_k<AqB*4|A#E|UkM_au0Ys5ml4y{k$6?y%a5u=>>Y(SZ4 zk*GW0LpnMZ&->Vh1}&Z)1WyqI$=^*ja~$(t5zlt!Ir2aY1IMx7AruIc=hrIY7qO$@ z(rd!|h{vm6t8k31AKkGW&v?AGX(^{z|0}U!sssJIlH+M6;=QU>%zr7`V@afoLg^^Q Pi|-N(9f^ACf*k)p(MMbw -- 2.20.1